/**
 * 浏览器兼容性和错误处理工具
 */

// 配置
const BROWSER_CONFIG = {
    EXTENSION_ERROR_PATTERNS: [
        'Receiving end does not exist',
        'Could not establish connection'
    ]
};

// 是否为浏览器扩展错误
const isExtensionError = (message) => {
    if (!message || typeof message !== 'string') return false;

    return BROWSER_CONFIG.EXTENSION_ERROR_PATTERNS.some(pattern =>
        message.includes(pattern)
    );
};

// 全局错误处理器，捕获常见错误并防止应用崩溃
export const setupErrorHandlers = () => {
    // 监听未捕获的Promise异常
    window.addEventListener('unhandledrejection', (event) => {
        const error = event.reason;

        // 忽略浏览器扩展相关的错误
        if (error && isExtensionError(error.message)) {
            console.warn('忽略浏览器扩展相关错误:', error.message);
            event.preventDefault(); // 防止错误继续传播
            return;
        }

        console.error('未处理的Promise异常:', error);
    });

    // 监听全局JavaScript错误
    window.addEventListener('error', (event) => {
        // 忽略浏览器扩展相关的错误
        if (isExtensionError(event.message)) {
            console.warn('忽略浏览器扩展相关错误:', event.message);
            event.preventDefault(); // 防止错误继续传播
            return;
        }

        console.error('全局JavaScript错误:', event.error || event.message);
    });

    // 修复可能出现的console.error问题
    const originalConsoleError = console.error;
    console.error = function (...args) {
        // 过滤掉某些无害错误
        if (args[0] && isExtensionError(args[0])) {
            console.warn('忽略的错误:', ...args);
            return;
        }
        originalConsoleError.apply(console, args);
    };
};

// 安全复制到剪贴板的函数
export const safeClipboardWrite = async (text) => {
    try {
        // 优先使用现代API
        if (navigator.clipboard && navigator.clipboard.writeText) {
            await navigator.clipboard.writeText(text);
            return true;
        }

        // 回退方法：使用document.execCommand
        const textarea = document.createElement('textarea');
        textarea.value = text;

        // 设置位置到视口外
        Object.assign(textarea.style, {
            position: 'fixed',
            left: '-999999px',
            top: '-999999px'
        });

        document.body.appendChild(textarea);
        textarea.focus();
        textarea.select();

        const success = document.execCommand('copy');
        document.body.removeChild(textarea);
        return success;
    } catch (err) {
        console.error('复制到剪贴板失败:', err);
        return false;
    }
};